package com.qk.common.util;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;

// 自定义 LocalDateTime 反序列化器，支持多种格式
public class JacksonUtils extends JsonDeserializer<LocalDateTime> {
    // 支持的日期格式列表
    private static final List<DateTimeFormatter> FORMATTERS = Arrays.asList(
        DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"),
        DateTimeFormatter.ISO_LOCAL_DATE_TIME  // 对应 "yyyy-MM-ddTHH:mm:ss"
    );

    @Override
    public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        String dateStr = p.getValueAsString();
        for (DateTimeFormatter formatter : FORMATTERS) {
            try {
                // 尝试用当前格式解析
                return LocalDateTime.parse(dateStr, formatter);
            } catch (Exception e) {
                // 解析失败则尝试下一种格式
                continue;
            }
        }
        // 所有格式都解析失败，抛出异常
        throw new IOException("无法解析日期格式: " + dateStr + "，支持的格式为：yyyy-MM-dd HH:mm:ss 和 yyyy-MM-ddTHH:mm:ss");
    }
}